import axios from "axios"
import { message } from "antd"
import { getToken } from "../utils/user-token"

const axiosInstance = axios.create({
    timeout: 10 * 1000
})

export default axiosInstance

export type ResDataType = {
    // 对象类型
    [key: string]: any
}
// 根据API设计设置类型

export type ResType = {
    errno: number
    data?: ResDataType
    msg?: string
}

// 请求拦截器：每次请求都带上token
axiosInstance.interceptors.request.use(
    config => {
        config.headers["Authorization"] = `Bearer ${getToken()}` // JWT 固定格式
        return config
    },
    error => Promise.reject(error)
)

// 响应拦截器 ：统一处理errno（error number）和msg
axiosInstance.interceptors.response.use(res => {
    // 响应拦截器成功的回调
    // 在API设计中可以有些api不包括data
    const resData = (res.data || {}) as ResType
    const { errno, data, msg } = resData

    if (errno !== 0) {
        // 如果errno不等于，就进行错误提示
        // msg可能为空
        if (msg) {
            message.error(msg)
        }
        throw new Error(msg)
    }

    return data as any
})
